#ifndef PRIORITYQUEUE_H_INCLUDED
#define PRIORITYQUEUE_H_INCLUDED

#define OUT
#define IN

typedef enum err_PQ {
CONT_All_IS_OK                           =0,
CONT_IMPOSSIBLE_ALLOCATE_NEW_CONT        =1,
CONT_OUT_OF_BOUND_Get                   =10,
CONT_NOT_ACCEPT_CONTAINER_Add           =20,
CONT_ADD_BY_INDEX_ERROR                 =25,
CONT_NOT_ACCEPT_DATA_Get                =30,
CONT_EMPTY_CONTAINER_NOTHING_TO_DELETE  =40,
CONT_DATA_NOT_FITTED_Get                =50,
CONT_NOT_ACCEPT_CONTAINER_Get           =60,
CONT_NOT_ACCEPT_DATA_Set                =70,
CONT_NOT_ACCEPT_CONTAINER_Set           =80,
CONT_WRONG_DELET_ACTION                 =90,
CONT_NOT_ACCEPT_A_CONT                 =100,
PUSH_PROBLEMS_OR_POP_PROBLEMS          =110,
CONT_EMPTY_ARRAY_NOTHING_POP           =120
 } err_PQ;

typedef struct PQ_Queue PQ;
/*function return pointer to Struct vec or NULL*/
PQ* PQ_Creat();

/*function return 0 if o.k and value 100-200 if not succeded*/
err_PQ PQ_Queue_Pushback(PQ* Que,void* data);

/*function return 0 if o.k and err value otherwise*/
err_PQ Queue_Push_to_index(PQ* _Que,void* _data,size_t _index);

/*function returs Pointer to Pop_up item or error else*/
err_PQ PQ_Queue_Popfront(PQ* Que,OUT void** data);

/*return pointer to data specified by index*/
err_PQ  PQ_Showindex(PQ* _Que,OUT void** data,size_t _index);


/*free memory allocated to store data*/
void PQ_Queue_Destroy(PQ* Que);

#endif /* PRIORITYQUEUE_H_INCLUDED*/
